package simple.array;

import java.util.Arrays;

/**
 * <a href="https://leetcode.cn/problems/unique-number-of-occurrences/">1207. 独一无二的出现次数</a>
 * 给你一个整数数组 arr，请你帮忙统计数组中每个数的出现次数。
 * 如果每个数的出现次数都是独一无二的，就返回 true；否则返回 false。
 * 示例 1：
 *   输入：arr = [1,2,2,1,1,3]
 *   输出：true
 *   解释：在该数组中，1 出现了 3 次，2 出现了 2 次，3 只出现了 1 次。没有两个数的出现次数相同。
 * 示例 2：
 *   输入：arr = [1,2]
 *   输出：false
 * 示例 3：
 *   输入：arr = [-3,0,1,-3,1,1,1,-3,10,0]
 *   输出：true
 * 提示：
 *   1 <= arr.length <= 1000
 *   -1000 <= arr[i] <= 1000
 * @author 刘学松
 * @date 2023-07-26 15:47
 */
public class 独一无二的出现次数 {
    public boolean uniqueOccurrences(int[] arr) {
        Arrays.sort(arr);
        boolean[] flags = new boolean[1001];
        int last = arr[0], count = 0;
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] == last) {
                ++count;
            } else {
                if (flags[count]) {
                    return false;
                }
                flags[count] = true;
                last = arr[i];
                count = 1;
            }
        }
        return !flags[count];
    }
}
